Scrapbox ChatGPT Connectorを実際に使ってみるまで
以下は実際に使ってみるか判断するまでの作業ログ at 2023/03/09
理解する
✅ベクトル検索まわり
✅埋め込みベクトル以外のやり方でもいける説
✅トークンについて
✅そもそも「俺のsta.json 26MBを全部与える」ことはできるのか?
そもそもsta.iconは具体的に何を理解したい?
OpenAI APIを買う決心をする
買う
---
理解する
https://gyazo.com/2771fdb01ea77aa72adfa69290efbed7
1-docを1-vectorに変換する
このvectorをn-docs分集める
この集まりをベクトルインデックスという
1-質問(1-query)も1-vectorに変換する
ここまでで以下がある
1: vector-index from N-docs
2: 1-vector from query
1と2を使ってベクトル検索をする
以下ができる
3: 似ている順に並んだtext
この3が「プロンプト」になる
プロンプトというと「短めの自然言語」を思い浮かべがちだが、そうではなく、「似ている順に並んだテキスト」を与えることができるsta.icon
たぶんyuiseki.iconがChatGPT使うときに「あなたは~~です」みたいな指示を与えるが、あれがたくさん列挙されたようなイメージなのだろうsta.icon
(4のテンプレートのくだりは単純化のため無視する)
つまり本質的には「類似度順にソートされたテキストの列(たぶん1-text 1-lineのn行テキスト)」を与えさえできれば良いsta.icon
nishio.icon says 別に似てる順でなくてもええで
「似てる順」である必然性はないので、例えばScrapboxのURLを渡して「このページと関連リンクのページを更新順に読んで」でもいい
4000トークンを超えてくると何らかの方法で選抜することが必要になる。この選抜の方法はいろいろあり得るけど、その一つの方法として埋め込みベクトルの類似度を使う方法があるというだけの話
んん?sta.icon
「ChatGPTに渡せるボリュームに落とす」ところまでは各自やれ、とのこと
gomi.icon
OpenAI APIの仕様が「埋め込みベクトルのみ受け付けられる」になっている認識だった
なので「このページと関連リンクのページを更新順に読んで」はそもそも(API側が対応してなくて)できない認識だった
どうやるのだろう
「このページと関連リンクのページを更新順に読む」を、ChatGPTができるように、上手い自然言語のプロンプトを与える必要がある?
できるだろうか
「今与えたjsonファイルの仕様を説明します。pagesにpageという概念がn件入っています。pageという概念は……」みたいな感じで、めっちゃ説明しないといけないと思う
あるいはコードで書いて例示する?
nishio.icon
そもそもChatGPTは4000トークンしか読めないのでScrapboxからエクスポートしたJSONを直接読ませることは不可能
プロンプトで頑張るのではなく、Pythonとかで「読む対象を選ぶコード」を書いて、選んでからChatGPTに渡す必要がある
OpenAIが提供しているAPIの中にEmbedding APIと、ChatGPT APIがあるnishio.icon
embedding apiに与えて埋め込みつくったあと、chatgpt apiに与えるの2ステップなのかsta.icon
そもそも「俺のsta.json 26MBを全部与える」ことはできるのか?
yes
一度に8000トークン(cl100k_baseの場合)しか与えられない + リクエスト頻度にもRate Limitがあるというだけ
8000以内を繰り返し与え続ければ、26MBだろうがなんだろうが埋め込みベクトルを作り切ることは可能
ただリクエスト頻度部分でひっかかるらしい(by motoso.icon)ので、sleep入れるなどして待ってあげる必要があるみたいだね
gomi.icon
No
明らかに無理
Rate Limiteオーバーしまくる
たぶん100万文字は超えてるだろうし
単純に3倍したとしても300万トークンwsta.icon
いやどうだろ
dai.iconさんがこう言っている
自分のスクボ入れたら、 質問の答えが本当に自分答えそうな感じになった
クオリアさん.iconのデモも既にある
トークン数の制約かなりエグいので、正直まともに情報入れられる気がしないsta.icon*2
せめて10万トークンくらい欲しいけど
実際1000もないんでしょ?
んー、たぶんsta.iconの理解がどこかおかしい
ページごとにtokenのRateLimitが入ってる、というニュアンスに聞こえる
pages辿って、titleとlines辿って
lineのparseではリンク系を削りつつ、line単位でリスト化(その後スペースでjoin)、そのサイズがblocksize(500)超えたらVectorStoreに入れている
トークン計算は、そのjoinした文字列に対して行っている
つまり「各行をスペースでjoinした文字列 + URLとリンクは間引いたもの」ベースで、トークンサイズが8100以内になる範囲でトークン化しているsta.icon
そもそもsta.iconは具体的に何を理解したい?
とっさには「別に」「何も思い浮かない」
sta.iconの悪い癖だが、「俺のスクボをAIが読んで答えられるようになったらまあなんかいい感じになるやろ」というふわふわな理解をしてそこで止まっているw
ひねり出す
1 探しものしたいな
Twitterの次に流行るシステムについて色々考えてたと思うけど、今までどんなの考えてたっけ?
2 知的生産したい
次に私に訪れるパラダイムシフトはどのようなものだと思いますか?_
3 危なさを調べる
私の住所を推測してみてください
4 モテたい
20-30代、Fカップの可愛い彼女が欲しいです。私が最短で手に入れるにはどうしたらいいと思いますか?
やっぱり時期尚早だな。何も思いつかない
もうしばらく井戸端民をウォッチしよう。俺の火がつくのを待つsta.icon
できてまーす